package ar.com.age.distribuidora.presentacion.controller;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;
import org.primefaces.model.DualListModel;

import ar.com.age.distribuidora.dominio.Producto;
import ar.com.age.distribuidora.dominio.Proveedor;
import ar.com.age.distribuidora.presentacion.util.ServiceLocator;

@ManagedBean
@SessionScoped
public class EditarProductoBean {

	private Producto productoSeleccionado;  
    
    private Producto productoSeleccionadoDetalles;
    
    private DualListModel<Proveedor> proveedores;  

    
  
	public Producto getProductoSeleccionado() {
		return productoSeleccionado;
	}

	public void setProductoSeleccionado(Producto productoSeleccionado) {
		this.productoSeleccionado = productoSeleccionado;
	}

	public Producto getProductoSeleccionadoDetalles() {
		return productoSeleccionadoDetalles;
	}

	public void setProductoSeleccionadoDetalles(
			Producto productoSeleccionadoDetalles) {
		this.productoSeleccionadoDetalles = productoSeleccionadoDetalles;
	}
	
	public DualListModel<Proveedor> getProveedores() {
		return proveedores;
	}

	public void setProveedores(DualListModel<Proveedor> proveedores) {
		this.proveedores = proveedores;
	}
	
    
	public String actualizarProducto() {
		
		if (!this.proveedores.getTarget().isEmpty()) {
			
			this.productoSeleccionado.setProveedores(this.proveedores.getTarget());
			
			ServiceLocator.getProductoService().crearOEditar(this.productoSeleccionado);
			this.productoSeleccionado = null;
			
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Producto",  "Producto editado con exito.");  
	        
	        FacesContext.getCurrentInstance().addMessage(null, message);  
			return "/mensajeExitoso";		
			
		} else {
			
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Advertencia", "No ha seleccionado ningun proveedor.");  
	        RequestContext.getCurrentInstance().showMessageInDialog(message);
			return null;
		}
		
	}
	
	public String editarProducto() {
		
		List<Proveedor> disponibles = ServiceLocator.getProveedorService().buscarTodos();

		if (this.productoSeleccionado != null) {
			
			// cargo las listas de proveedores
			List<Proveedor> insertados = ServiceLocator.getProductoService().retornarProductoConProveedores(productoSeleccionado).getProveedores();
			
			for(Proveedor prov1 : insertados){
				
				for(int i = 0; i < disponibles.size(); i++){
					if (prov1.getCodigo().equals(disponibles.get(i).getCodigo())) {
						disponibles.remove(i);
					}
				}
			}
					
			this.proveedores = new DualListModel<Proveedor>(disponibles, insertados);

			return "editarProducto";

		} else {
			
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Advertencia", "No ha seleccionado ningun elemento.");  
	        RequestContext.getCurrentInstance().showMessageInDialog(message);
			return null;
		}	

	}
	
	public String setearProducto() {
		
		ServiceLocator.getProductoService().crearOEditar(productoSeleccionado);
		
		return "editarListaProveedores";
	}
	
	public String eliminarProducto() {
		
		if (this.productoSeleccionado != null) {

			ServiceLocator.getProductoService().eliminar(this.productoSeleccionado);
			return "/mensajeExitoso";

		} else {
			
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Advertencia", "No ha seleccionado ningun elemento.");  
	        RequestContext.getCurrentInstance().showMessageInDialog(message);
			return null;
		}	

	}


    
}
